/*
 * @(#)Instruction.java                        2.1 2003/10/07
 *
 * Copyright (C) 1999, 2003 D.A. Watt and D.F. Brown
 * Dept. of Computing Science, University of Glasgow, Glasgow G12 8QQ Scotland
 * and School of Computer and Math Sciences, The Robert Gordon University,
 * St. Andrew Street, Aberdeen AB25 1HG, Scotland.
 * All rights reserved.
 *
 * This software is provided free for educational use only. It may
 * not be used for commercial purposes without the prior written permission
 * of the authors.
 */

package TAM;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.EOFException;
import java.io.IOException;

public class Instruction {

	public Instruction() {
		op = 0;
		r = 0;
		n = 0;
		d = 0;
	}

	// Java has no type synonyms, so the following representations are
	// assumed:
	//
	// type
	// OpCode = 0..15; {4 bits unsigned}
	// Length = 0..255; {8 bits unsigned}
	// Operand = -32767..+32767; {16 bits signed}

	// Represents TAM instructions.
	public int op; // OpCode
	public int r; // RegisterNumber
	public int n; // Length
	public int d; // Operand

	public void write(DataOutputStream output) throws IOException {
		output.writeInt(op);
		output.writeInt(r);
		output.writeInt(n);
		output.writeInt(d);
	}

	public static Instruction read(DataInputStream input) throws IOException {
		Instruction inst = new Instruction();
		try {
			inst.op = input.readInt();
			inst.r = input.readInt();
			inst.n = input.readInt();
			inst.d = input.readInt();
			return inst;
		} catch (EOFException s) {
			return null;
		}
	}
}
